﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NDF
{
    /// <summary>
    /// 为常见的字符对象(struct System.Char)操作提供实用工具方法。
    /// </summary>
    public static class CharHelper
    {
        /// <summary>
        /// 判断指定的字符为空但不是换行符
        /// </summary>
        /// <param name="c">被判断的字符。</param>
        /// <returns>如果 c 为空字符、Null 并且不是 回车符、换行符、行分隔符和段分隔符，则返回 true，否则返回 false。</returns>
        public static bool IsNonNewLineWhitespace(this char c)
        {
            return Char.IsWhiteSpace(c) && !IsNewLine(c);
        }

        /// <summary>
        /// 判断指定的字符是否为一个换行符
        /// </summary>
        /// <param name="c">被判断的字符。</param>
        /// <returns>如果 c 为 回车符、换行符、行分隔符和段分隔符，则返回 true，否则返回 false。</returns>
        public static bool IsNewLine(this char c)
        {
            return c == 0x000d          // 回车
                      || c == 0x000a    // 换行
                      || c == 0x2028    // 行分隔符
                      || c == 0x2029;   // 段分隔符
        }

        /// <summary>
        /// 判断指定的字符是否为一个普通字符(大写字母、小写字母、数字或者下划线)。
        /// </summary>
        /// <param name="c"></param>
        /// <returns>如果指定的字符为一个普通字符(大写字母、小写字母、数字或者下划线)，则返回 true，否则返回 false。</returns>
        public static bool IsNormal(this char c)
        {
            return (c >= 48 && c <= 57) || (c >= 65 && c <= 90) || c == 95 || (c >= 97 && c <= 122);
        }
    }
}
